【アップデート】AWS Lambdaで環境変数を使えるようになりました!!!
インフルエンザの予防接種の副反応で高熱が出た森永です。
全国1億2千万人のLambdaファンの皆さん、遂にLambdaに環境変数が追加されました!!!
環境変数対応
多くの要望があった環境変数ですが遂に対応されました。
詳細は以下の通りです。
- 環境変数の数に制限なし
- ただし、キーバリュー合計4KBまで
- キーは半角英語
[^a-zA-Z]
で始める、かつ半角英数字とアンダーバー[a-zA-Z0-9\_]
のみ バリューはカンマのみ使用不可(検証したところマルチバイト文字もいけました。)- バリューはカンマ、マルチバイト文字含め使用可能(カンマ使えるようになったようです!!)
- 以下は予約語なので使用できない
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
- AWS_ACCESS_KEY
- AWS_SECRET_KEY
- AWS_SECURITY_TOKEN
- AWS_DEFAULT_REGION
- AWS_REGION
- AWS_LAMBDA_LOG_GROUP_NAME
- AWS_LAMBDA_LOG_STREAM_NAME
- AWS_LAMBDA_FUNCTION_NAME
- AWS_LAMBDA_FUNCTION_MEMORY_SIZE
- AWS_LAMBDA_FUNCTION_VERSION
- LAMBDA_TASK_ROOT
- LAMBDA_RUNTIME_DIR
- 環境変数はKMSで自動的に暗号化される
- カスタムのKMSキーを使用する際は
kms:Decrypt
の権限つきロールが必要(デフォルトキーの場合不要) - パスワードなどセンシティブな情報はクライアントサイドで暗号化したものを、Lambda内で復号化すること推奨
- クライアントサイド暗号化もできますよ
- カスタムのKMSキーを使用する際は
カンマ使えればJSON突っ込めるんですが、そのままじゃ出来ないのでBase64等で頑張るしかなさそうです。
Base64で頑張る方法はこちら
カンマ使えるようになったので普通に使いましょう。
試してみた
早速試してみます。
Python2.7で試してみます。
Lambda Functionのコードの下に「Environment variables」という項目が追加されています。
以下のようなコードを実行して、環境変数を表示してみます。
環境変数は「TEST」というキーに「env_test」というバリューを設定しています。
import os def lambda_handler(event, context): print os.environ print os.environ['TEST']
実行した結果どうなったでしょうか…DOKIDOKI
{'AWS_LAMBDA_FUNCTION_VERSION': '$LATEST', 'LAMBDA_TASK_ROOT': '/var/task', 'PATH': '/usr/local/bin:/usr/bin/:/bin', 'LD_LIBRARY_PATH': '/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib', 'LANG': 'en_US.UTF-8', 'AWS_LAMBDA_FUNCTION_NAME': 'env_variables', 'AWS_REGION': 'us-east-1', 'AWS_SESSION_TOKEN': '省略', 'AWS_SECURITY_TOKEN': '省略', 'LAMBDA_RUNTIME_DIR': '/var/runtime', 'AWS_LAMBDA_FUNCTION_MEMORY_SIZE': '128', 'PYTHONPATH': '/var/runtime', 'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/env_variables', 'AWS_LAMBDA_LOG_STREAM_NAME': '2016/11/19/[$LATEST]e27d0567cccd4b868c8eb180a8340a92', 'AWS_ACCESS_KEY_ID': '省略', 'AWS_DEFAULT_REGION': 'us-east-1', 'AWS_SECRET_ACCESS_KEY': '省略', 'TEST': 'env_test'} env_test
os.environ
を確認すると、LambdaファンクションのバージョンやPATH、実行しているリージョン、アクセスキーやシークレットキーがデフォルトで格納されていることが分かります。
os.environ['TEST']
でちゃんと「TEST」のバリューも取得できていますね!
さいごに
待ちに待った環境変数です!
作っていたLambdaファンクションにS3のバケット名などハードコーディングしていたものがあったので、書き直そうと思います。
よいLambda生活を!!